# @Time : 2025-03-26 15:27
# @Author : Fioman 
# @Phone : 13149920693
"""
可以查看类的继承关系,进而知道这个类的所有的子类
注意pyside6的按需加载,这里要注意一下.就是如果显示的导入
动态加载机制
PySide6 的模块（如 QtWidgets）采用按需加载机制。QAbstractButton 的子类（例如 QPushButton、
QRadioButton）只有在实际被导入或使用时才会注册到父类的子类列表中。直接调用 __subclasses__() 时，
若子类未被加载，返回结果为空。

命名空间隔离
PySide6 的类可能分布在不同的子模块中。例如，QPushButton 属于 QtWidgets 模块，但若未显式导入，
Python 解释器不会自动加载这些子类到父类的子类关系中。

所以需要显示的导入类,才能查看到其继承关系
"""
from PySide6.QtWidgets import (
    QAbstractButton
)


def get_sub_classes(classType):
    print(classType.__subclasses__())
    for subClass in classType.__subclasses__():
        print(f"SubClass: {subClass}")
        if len(subClass.__subclasses__()) > 0:
            get_sub_classes(subClass)


if __name__ == '__main__':
    # 查看QAbstractButton抽象基类的所有的子类,了解Qt6提供了哪些按钮控件
    get_sub_classes(QAbstractButton)
